#include <iostream>

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"



class OneLoop {
public:
    std::vector<int> zc_vec;
    std::list<int> nums;
//    std::list<int> nums;

    //最新的整除
    bool new_zc(int n){
        return n%(zc_vec[zc_vec.size()-1])==0;
    }
    //之前的整除
    bool old_zc(int n){
        for(int i=0;i<zc_vec.size()-1;i++){
            auto v=zc_vec[i];
            if(n%v!=0){
                return false;
            }
        }
        return true;
    }

    bool run(
            int a,int b
    ) {
        std::vector<int> vec;
        for(int i=1;i<=b;i+=2){
            vec.push_back(i);
        }
        int zc=3;

        int di_n_xys=2;
        int vec_size=vec.size();
        int begin_i=-1;
        while(1){
            int sc=0;
            for(int i=0;i<vec_size;i++){

                vec[i-sc]=vec[i];
                if(vec[i-sc]<=a){
                    begin_i=i-sc;
                }
//                begin_i=vec[i-sc];
                if((i+1)%zc==0){
                    sc++;
                }
            }
            if(sc==0){
                break;
            }
            vec_size-=sc;
            zc=vec[di_n_xys];
            di_n_xys++;
        }
        if(vec[vec_size-1]==b){
            vec_size--;
        }
        printf("%d\n",vec_size-begin_i-1);
        return true;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int a, b, c, d, e;
        //        std::cin >> a;
//        std::string s1,s2;
//        while (1){
        while (std::cin>>a>>b) {
//            std::getline(std::cin,s2);
            OneLoop l;
            if (!l.run(a,b)) {
//                                return;
            }
        }


    }
};

int main() {

    //    bool cur_num= true;
    Solution().run();
    return 0;
}

